package com.javaex.book.utils;

import com.fasterxml.jackson.annotation.JsonIgnore;

/**
 * 用于service层和Controller层的返回结果
 *
 * @author 黄星琦
 * @Date 2022年3月2日
 */
public class ReturnResult {
	
	/** 成功状态码 */
	public static final Integer SUCCESS = 1;
	
	/** 失败状态码 */
	public static final Integer FAIL = -1;

	/** 状态码 */
	private Integer code;
	
	/** 提示信息 */
	private String message;
	
	/** 返回的数据 */
	private Object data;

	public int getCode() {
		return code;
	}

	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}

	public Object getData() {
		return data;
	}

	public ReturnResult setData(Object data) {
		this.data = data;
		return this;
	}
	
	/**
	 * 判断当前ReturnResult对象是否是成功状态
	 * @return 是否是成功状态
	 */
	@JsonIgnore
	public boolean isSuccess() {
		return this.code == SUCCESS;
	}
	
	/**
	 * 判断当前ReturnResult对象是否是错误状态
	 * @return 是否是错误状态
	 */
	@JsonIgnore
	public boolean isFail() {
		return this.code == FAIL;
	}
	
	/**
	 * 返回成功状态的ReturnResult对象
	 * @return 成功状态的ReturnResult对象
	 */
	public static ReturnResult success() {
		return success(null, null);
	}
	
	/**
	 * 返回成功状态的ReturnResult对象，并设置提示信息
	 * @param message 提示信息
	 * @return 成功状态的ReturnResult对象
	 */
	public static ReturnResult success(String message) {
		return success(message, null);
	}
	
	/**
	 * 返回成功状态的ReturnResult对象，并设置提示信息和返回数据
	 * @param message 提示信息
	 * @param data 返回数据
	 * @return 成功状态的ReturnResult对象
	 */
	public static ReturnResult success(String message, Object data) {
		ReturnResult result = new ReturnResult();
		result.code = SUCCESS;
		result.message = message;
		result.data = data;
		return result;
	}
	
	/**
	 * 返回失败状态的ReturnResult对象
	 * @return 失败状态的ReturnResult对象
	 */
	public static ReturnResult fail() {
		return fail(null);
	}
	
	/**
	 * 返回失败状态的ReturnResult对象，并设置提示信息
	 * @param message 失败提示信息
	 * @return 失败状态的ReturnResult对象
	 */
	public static ReturnResult fail(String message) {
		ReturnResult result = new ReturnResult();
		result.code = FAIL;
		result.message = message;
		return result;
	}
}